#!/bin/bash

# 启动ChunkMaster进程脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}=== 启动ChunkMaster进程 ===${NC}"

# 获取脚本所在目录
SCRIPT_DIR=$(cd $(dirname $0); pwd)
CHUNKMASTER_DIR="$SCRIPT_DIR/persistent_layer/chunkmaster"
BUILD_DIR="$CHUNKMASTER_DIR/build"
LOG_DIR="$SCRIPT_DIR/logs"

# 检查chunkmaster可执行文件
if [ ! -f "$BUILD_DIR/chunkmaster" ]; then
    echo -e "${RED}错误: chunkmaster可执行文件不存在${NC}"
    echo "请先运行 ./build_all.sh 编译项目"
    exit 1
fi

# 创建日志目录
mkdir -p "$LOG_DIR"

# 检查端口是否被占用
PORT=50050
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
    echo -e "${YELLOW}警告: 端口 $PORT 已被占用${NC}"
    echo "正在检查是否已有chunkmaster进程运行..."
    
    # 检查是否有chunkmaster进程
    if pgrep -f "chunkmaster" > /dev/null; then
        echo -e "${GREEN}ChunkMaster进程已在运行${NC}"
        echo "进程ID: $(pgrep -f 'chunkmaster')"
        exit 0
    else
        echo -e "${RED}端口被其他进程占用，请手动释放端口 $PORT${NC}"
        exit 1
    fi
fi

# 复制配置文件（如果存在）
if [ -f "$CHUNKMASTER_DIR/config.json" ]; then
    cp "$CHUNKMASTER_DIR/config.json" "$BUILD_DIR/"
    echo -e "${BLUE}配置文件已复制${NC}"
fi

# 启动chunkmaster
echo -e "${BLUE}启动ChunkMaster进程...${NC}"
cd "$BUILD_DIR"

# 后台启动chunkmaster，使用yes命令防止因无输入而退出
nohup yes | ./chunkmaster > "$LOG_DIR/chunkmaster.log" 2>&1 &
CHUNKMASTER_PID=$!

# 等待一下让进程启动
sleep 2

# 检查进程是否成功启动
if kill -0 $CHUNKMASTER_PID 2>/dev/null; then
    echo -e "${GREEN}✓ ChunkMaster启动成功${NC}"
    echo "进程ID: $CHUNKMASTER_PID"
    echo "日志文件: $LOG_DIR/chunkmaster.log"
    echo "监听端口: $PORT"
    
    # 保存PID到文件
    echo $CHUNKMASTER_PID > "$LOG_DIR/chunkmaster.pid"
    echo -e "${BLUE}PID已保存到: $LOG_DIR/chunkmaster.pid${NC}"
else
    echo -e "${RED}✗ ChunkMaster启动失败${NC}"
    echo "请检查日志文件: $LOG_DIR/chunkmaster.log"
    exit 1
fi

echo ""
echo -e "${YELLOW}查看日志:${NC}"
echo "  tail -f $LOG_DIR/chunkmaster.log"
echo ""
echo -e "${YELLOW}停止ChunkMaster:${NC}"
echo "  ./stop_chunkmaster.sh"
echo ""
echo -e "${GREEN}ChunkMaster启动完成！${NC}" 